কাস্টম এক্সেপশন (Custom Exception) হলো C++ এ প্রোগ্রামারের নিজের তৈরি করা এক্সেপশন, যা সাধারণত স্ট্যান্ডার্ড এক্সেপশন (যেমন std::runtime_error
বা std::logic_error
) থেকে আলাদা এবং নির্দিষ্ট ত্রুটিপূর্ণ অবস্থাগুলিকে আরও স্পষ্টভাবে নির্দেশ করে। কাস্টম এক্সেপশন ক্লাস তৈরি করে প্রোগ্রামের বিভিন্ন স্থানে নির্দিষ্ট ত্রুটি পরিচালনা করা সহজ হয়।
C++ এ কাস্টম এক্সেপশন তৈরি করার জন্য সাধারণত std::exception
ক্লাসটি ইনহেরিট করতে হয় এবং what()
মেথড ওভাররাইড করে কাস্টম ত্রুটি বার্তা প্রদান করা হয়।
#include <iostream>
#include <exception>
using namespace std;
class DivisionByZeroException : public exception { // কাস্টম এক্সেপশন ক্লাস
public:
const char* what() const noexcept override { // what() মেথড ওভাররাইড
return "Error: Division by zero is not allowed!";
}
};
int divide(int a, int b) {
if (b == 0) {
throw DivisionByZeroException(); // এক্সেপশন ছোড়া হচ্ছে
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Division by zero এক্সেপশন ট্রিগার
cout << "Result: " << result << endl;
}
catch (const DivisionByZeroException& e) { // কাস্টম এক্সেপশন হ্যান্ডল করা
cout << e.what() << endl;
}
return 0;
}
বর্ণনা:
DivisionByZeroException
নামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা std::exception
ক্লাস থেকে ইনহেরিট করা।what()
মেথড ওভাররাইড করা হয়েছে, যা কাস্টম ত্রুটি বার্তা প্রদান করে।divide()
ফাংশনে যদি ডেনোমিনেটর 0
হয়, তবে DivisionByZeroException
এক্সেপশন ছোড়া হয়।main()
ফাংশনে catch
ব্লক সেই এক্সেপশন ধরে এবং what()
মেথডের মাধ্যমে ত্রুটি বার্তা প্রদর্শন করে।#include <iostream>
#include <fstream>
#include <exception>
using namespace std;
class FileNotFoundException : public exception {
public:
const char* what() const noexcept override {
return "Error: File not found!";
}
};
void openFile(const string& filename) {
ifstream file(filename);
if (!file.is_open()) {
throw FileNotFoundException(); // ফাইল না পাওয়া গেলে এক্সেপশন ছোড়া
}
cout << "File opened successfully!" << endl;
}
int main() {
try {
openFile("nonexistent.txt"); // যে ফাইলটি নেই তা ওপেন করতে চেষ্টা করা হচ্ছে
}
catch (const FileNotFoundException& e) { // কাস্টম এক্সেপশন ক্যাচ করা
cout << e.what() << endl;
}
return 0;
}
বর্ণনা:
FileNotFoundException
নামে একটি কাস্টম এক্সেপশন ক্লাস তৈরি করা হয়েছে, যা ফাইল না পাওয়ার ক্ষেত্রে নির্দিষ্ট ত্রুটি বার্তা প্রদান করে।openFile()
ফাংশনে যদি ফাইল খোলা সম্ভব না হয়, তবে FileNotFoundException
এক্সেপশন ছোড়া হয় এবং main()
এ catch
ব্লকে সেটি ধরা হয়।std::exception
ক্লাস থেকে ইনহেরিট করা: এটি করা জরুরি নয়, তবে করা হলে std::exception
এর বৈশিষ্ট্যগুলো সহজেই পাওয়া যায়।what()
মেথড ওভাররাইড করা: কাস্টম বার্তা প্রদানের জন্য what()
মেথড ওভাররাইড করে নির্দিষ্ট বার্তা প্রদান করা হয়।#include <iostream>
#include <exception>
#include <string>
using namespace std;
class CustomException : public exception {
string message;
public:
CustomException(const string& msg) : message(msg) {}
const char* what() const noexcept override {
return message.c_str();
}
};
int main() {
try {
throw CustomException("Custom error occurred with additional details."); // কাস্টম বার্তা সহ এক্সেপশন ছোড়া হচ্ছে
}
catch (const CustomException& e) {
cout << e.what() << endl; // কাস্টম বার্তা প্রদর্শন করা হচ্ছে
}
return 0;
}
বর্ণনা:
CustomException
ক্লাসে একটি কনস্ট্রাক্টর যোগ করা হয়েছে, যা একটি বার্তা গ্রহণ করে।what()
মেথড ওভাররাইড করে সেই বার্তা প্রদর্শন করা হচ্ছে।std::exception
ক্লাস থেকে ইনহেরিট করে কাস্টম এক্সেপশন ক্লাস তৈরি করা যায়।what()
মেথড ওভাররাইড করে কাস্টম বার্তা প্রদান করা যায়।কাস্টম এক্সেপশন ব্যবহার করে ত্রুটি হ্যান্ডলিং আরও নির্দিষ্ট এবং কার্যকরী করা যায়, যা বড় প্রোগ্রামে ত্রুটি সনাক্ত ও সমাধানকে সহজ করে।
common.read_more